package com.itheima.ydd.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.ydd.common.R;
import com.itheima.ydd.common.ResultData;
import com.itheima.ydd.entity.YddTag;
import com.itheima.ydd.service.IYddTagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author author
 * @since 2022-05-22
 */
@RestController
@RequestMapping("/ydd_tag")
public class YddTagController {
    @Autowired
    private IYddTagService iYddTagService;
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 分页查询
     *
     * @param tagname
     * @param page
     * @param limit
     * @return
     */
    @GetMapping("/list")
//    @Cacheable(value = "yddtag", key = "#p0 +'_'+ #p1 + '_' + #p2")
    public R list(String tagname, Integer page, Integer limit) {
        Page<YddTag> pageInfo = new Page<>(page, limit);
        LambdaQueryWrapper<YddTag> lqw = new LambdaQueryWrapper<>();
        lqw.like(tagname != null, YddTag::getTagname, tagname);
        iYddTagService.page(pageInfo, lqw);
        Map map = new HashMap();
        map.put("count", (int) pageInfo.getTotal());
        map.put("totalPages", (int) (pageInfo.getTotal() / pageInfo.getSize() + 1));
        map.put("pageSize", (int) pageInfo.getSize());
        map.put("currentPage", (int) pageInfo.getCurrent());
        map.put("data", pageInfo.getRecords());
        return new R(map, "", 0);
    }

    /**
     * 添加标签
     *
     * @param yddTag
     * @return
     */
    @PostMapping("/add")
//    @CacheEvict(value = "yddtag", allEntries = true)
    public ResultData add(@RequestBody YddTag yddTag) {
        iYddTagService.save(yddTag);
        return ResultData.ok("", "");
    }

    /**
     * 根据id获取标签
     *
     * @param id
     * @return
     */
    @GetMapping("/rowInfo")
//    @Cacheable(value = "yddtag", key = "#p0")
    public ResultData rowInfo(Long id) {
        YddTag tag = iYddTagService.getById(id);
        return ResultData.ok("", tag);
    }

    /**
     * 标签修改
     *
     * @param yddTag
     * @return
     */
    @PostMapping("/update")
//    @CacheEvict(value = "yddtag", allEntries = true)
    public ResultData update(@RequestBody YddTag yddTag) {
        iYddTagService.updateById(yddTag);
        return ResultData.ok("", "");

    }

    /**
     * 根据id标签删除
     *
     * @param id
     * @return
     */
    @GetMapping("/del")
//    @CacheEvict(value = "yddtag", allEntries = true)
    public ResultData del(Long id) {
        iYddTagService.removeById(id);
        return ResultData.ok("", "");
    }

    /**
     * 添加文章界面时查询所有标签
     *
     * @return
     */
    @GetMapping("/all")
    public ResultData all() {
        List<YddTag> tags = iYddTagService.list();
        return ResultData.ok("", tags);
    }
}
